// Test read after opTime functionality with maxTimeMS on config servers (CSRS only)`.
// @tags: [
//   # TODO (SERVER-97257): Re-enable this test.
//   # Test doesn't start enough mongods to have num_mongos routers
//   embedded_router_incompatible,
// ]

import {ShardingTest} from "jstests/libs/shardingtest.js";

var shardingTest = new ShardingTest({shards: TestData.configShard ? 1 : 0});

assert(shardingTest.configRS, 'this test requires config servers to run in CSRS mode');

var configReplSetTest = shardingTest.configRS;
var primaryConn = configReplSetTest.getPrimary();

var lastOp = configReplSetTest.awaitLastOpCommitted();
assert(lastOp, 'invalid op returned from ReplSetTest.awaitLastOpCommitted()');

var term = lastOp.t;

var runFindCommand = function(ts) {
    return primaryConn.getDB('local').runCommand({
        find: 'oplog.rs',
        readConcern: {
            afterOpTime: {
                ts: ts,
                t: term,
            },
        },
        maxTimeMS: 5000,
    });
};

assert.commandWorked(runFindCommand(lastOp.ts));

var pingIntervalSeconds = 10;
assert.commandFailedWithCode(
    runFindCommand(new Timestamp(lastOp.ts.getTime() + pingIntervalSeconds * 5, 0)),
    ErrorCodes.MaxTimeMSExpired);

var msg = /Command timed out waiting for read concern to be satisfied.*"db":"local"/;

assert.soon(function() {
    var logMessages = assert.commandWorked(primaryConn.adminCommand({getLog: 'global'})).log;
    for (var i = 0; i < logMessages.length; i++) {
        if (logMessages[i].search(msg) != -1) {
            return true;
        }
    }
    return false;
}, 'Did not see any log entries containing the following message: ' + msg, 60000, 300);
shardingTest.stop();
